home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
AMICUS
/
AMICUS09.ADF
/
Assembler
/
decigel.asm
< prev
next >
Wrap
Assembly Source File
|
1986-05-22
|
3KB
|
67 lines
;***************************************************************
; *
; DeciGEL (Relief from MC68010 pains on the Amiga) *
; *
; Copyright 1986 by Scott Turner *
; Program may be copied and used for non-commercial uses only. *
; Requests for commercial use should be directed to: *
; *
; Scott Turner *
; 12311 Maplewood Avenue *
; Edmonds, Wa 98020-1115 *
; *
; Execute file to install patch. May be executed over and over *
; again. You lose about 40 bytes of memory each time you *
; execute it though. Reboot your AMiga (Ctrl-Amiga-AMiga) to *
; remove the patch. *
; *
; EXECUTE DeciGEL.make *
; Assembles and links a new DeciGEL *
; Program should work with MC68000/MC68008/MC68012/MC68020 *
; as well (ie. it won't die on MC68000/MC68008). *
;***************************************************************
; Some handy constants
SysBase EQU 4
AlcMem EQU -6*33
PrivVect EQU $20 ; Address of Privlege error vector
Main movea.l SysBase,A6
move.l CodeSize,D0
moveq #0,D1 ; PUBLIC
jsr AlcMem(A6) ; Get the memory
tst.l D0 ; Did we get it?
bne.s GotIt
moveq #100,D0 ; Return Error # 100
rts ; Back to AmigaDOS with error
GotIt move.l D0,A0 ; Move to work reg
move.l D0,A2 ; Save copy for patching vector
lea MoveMe,A1 ; Get address of our code
move.l CodeSize,D0 ; Number of bytes to move
subq.l #5,D0 ; Correct for DBF and one long word
Loop move.b (A1)+,(A0)+ ; Move byte
dbf D0,Loop
move.l PrivVect,(A0)+ ; Patch opcode at end
move.l A2,PrivVect ; Patch us into the vector
moveq #0,D0 ; Good return code
rts ; Back to AmigaDOS, no error
MoveMe movem.l D0/A0,-(SP) ; Save registers
move.l 8+2(SP),A0 ; Pointer to opcode
move.w (A0),D0 ; Pickup opcode
andi.w #~%111111,D0 ; Mask out EA field
cmpi.w #$40C0,D0 ; Is it a MOVE SR,ea?
bne.s NotOne
bset #1,(A0) ; Convert it to MOVE CCR,ea
movem.l (SP)+,D0/A0 ; Restore regs
rte ; Rerun new opcode
NotOne movem.l (SP)+,D0/A0 ; Restore regs
jmp $FC0000 ; To previous handler, patched on
; installation of this routine
CodeEnd
CodeSize DC.L CodeEnd-MoveMe ; Size of routine
end